package com.chromatic.competition.utils;

import android.content.Context;
import android.content.SharedPreferences;
import android.text.TextUtils;
import android.util.Log;
import android.widget.Toast;

import org.json.JSONException;
import org.json.JSONObject;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

/**
 * 用户登录状态管理工具类
 */
public class UserLoginStatus {
    private static final String PREFS_NAME = "login_info";
    private static final String USER_KEY = "user";
    private static final String LAST_LOGIN_TIME_KEY = "lastLoginTime";
    private final Context context;

    public UserLoginStatus(Context context) {
        this.context = context;
    }

    /**
     * 检查用户是否已登录
     *
     * @return true 如果用户已登录，否则 false
     */
    public boolean isUserLoggedIn() {
        SharedPreferences prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
        String userJson = prefs.getString(USER_KEY, "");
        Log.d("UserLoginStatus", "用户的登录信息：" + userJson);
        return !TextUtils.isEmpty(userJson);
    }

    /**
     * 检查用户登录是否已过期（有效期为7天）
     *
     * @return true 如果登录已过期，否则 false
     * @throws JSONException 如果解析 JSON 发生错误
     */
    public boolean isLoginExpired() throws JSONException {
        SharedPreferences prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
        JSONObject userObject = new JSONObject(prefs.getString(USER_KEY, ""));
        String lastLoginTime = userObject.getString(LAST_LOGIN_TIME_KEY);
        Log.d("UserLoginStatus", "最后一次登录时间（ISO 8601格式）: " + lastLoginTime);
        if (!TextUtils.isEmpty(lastLoginTime)) {
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.getDefault());
            try {
                // 解析上次登录时间
                Date lastLoginDate = format.parse(lastLoginTime);
                Log.d("UserLoginStatus", "最后一次登录时间（Date格式）: " + lastLoginDate);
                long lastLoginMillis = 0;
                if (lastLoginDate != null) {
                    lastLoginMillis = lastLoginDate.getTime();
                }
                long currentTimeMillis = System.currentTimeMillis();
                long sevenDaysInMillis = 7 * 24 * 60 * 60 * 1000; // 7 天的毫秒数

                // 判断登录是否已过期
                if ((currentTimeMillis - lastLoginMillis) > sevenDaysInMillis) {
                    // 已过期
                    Toast.makeText(context, "登录已过期（有效期7天），请重新登录！", Toast.LENGTH_SHORT).show();
                    Log.d("UserLoginStatus", "用户的登录状态已过期！");
                    return true;
                } else {
                    // 未过期
                    return false;
                }
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }
        Log.d("UserLoginStatus", "无法解析时间或者时间为空！");
        return true; // 如果无法解析时间或者时间为空，则默认为已过期
    }

    /**
     * 获取当前登录用户的用户ID
     *
     * @return 当前登录用户的用户ID
     */
    public int getCurrentUserId() {
        SharedPreferences prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
        String userJson = prefs.getString(USER_KEY, "");
        try {
            JSONObject userObject = new JSONObject(userJson);
            return userObject.getInt("userId");
        } catch (JSONException e) {
            throw new RuntimeException(e);
        }
    }
}